package com.colabo.j2ee.web.oaf.security;

import java.util.List;
import java.util.Map;

import com.colabo.j2ee.web.core.exception.ServiceException;

/**
 * 处理数据权限
 */
public interface IDataPermissionService {
	String BEAN_ID = "dataPermissionService";
	
	/**
	 * 通过岗位ID查询自定义数据权限
	 * @param position  职位ID
	 * @return 数据权限列表，List中的对象是IpDataPermissionVO
	 * @throws ServiceException
	 */
	public List findSelfDataPermission(String position) throws ServiceException;
	
	/**
	 * 通过用户ID查询自定义数据权限
	 * @param user  	用户ID
	 * @param dpCode    权限编码
	 * @return 数据权限列表，List中的对象是IpDataPermissionVO
	 * @throws ServiceException
	 */
	public List findSelfDataPermissionByUser(String user,String dpCode) throws ServiceException;
	
	/**
	 * 通过岗位ID列表查询自定义数据权限
	 * @param position  职位ID列表
	 * @return 数据权限列表，List中的对象是IpDataPermissionVO
	 * @throws ServiceException
	 */
	public List findSelfDataPermission(List position) throws ServiceException;
	
	/**
	 * 通过岗位ID列表查询自定义数据权限
	 * @param position  职位ID列表
	 * @param isPage  	是否是页面编码
	 * @return 字段列表，List中的对象是元数据中的编码字段
	 * @throws ServiceException
	 */
	public List findSelfDataPermission(List position,boolean isPage) throws ServiceException;

	/**
	 * 通过角色ID列表查询自定义数据权限
	 * @param role  角色ID列表
	 * @return 数据权限列表，List中的对象是IpDataPermissionVO
	 * @throws ServiceException
	 */
	public List findSelfDataPermissionByRole(List role) throws ServiceException;
	
	/**
	 * 通过角色ID列表查询自定义数据权限
	 * @param role  角色ID列表
	 * @param isPage  	是否是页面编码
	 * @return 字段列表，List中的对象是元数据中的编码字段
	 * @throws ServiceException
	 */
	public List findSelfDataPermissionByRole(List role,boolean isPage) throws ServiceException;
	
	/**
	 * 通过岗位ID、权限编码查询自定义数据权限
	 * @param position  职位ID
	 * @param dpCode    数据权限编码
	 * @return 数据权限列表，List中的对象是IpDataPermissionVO
	 * @throws ServiceException
	 */
	public List findSelfDataPermissionByPermissionCode(String position,String dpCode) 
																throws ServiceException;
	/**
	 * 通过岗位ID、权限编码查询自定义数据权限
	 * @param position  职位ID列表
	 * @param dpCode    数据权限编码列表
	 * @return 数据权限列表，List中的对象是IpDataPermissionVO
	 * @throws ServiceException
	 */
	public List findSelfDataPermissionByPermissionCode(List position,List dpCode) 
																throws ServiceException;	
	
	/**
	 * 通过岗位ID和权限对象查询数据权限
	 * @param position  职位ID
	 * @param object    权限对象
	 * @return 数据权限列表，List中的对象是IpDataPermissionVO
	 * @throws ServiceException
	 */
	public List findSelfDataPermission(String position,String object) 
										throws ServiceException;
	
	/**
	 * 通过岗位ID和权限对象查询数据权限
	 * @param position  职位ID
	 * @param dpCode    权限编码
	 * @param object    权限对象
	 * @return 数据权限列表，List中的对象是IpDataPermissionVO
	 * @throws ServiceException
	 */
	public List findSelfDataPermission(String position,String dpCode,String object) 
										throws ServiceException;	
	/**
	 * 通过岗位ID查询数据权限
	 * @param position  职位ID
	 * @param object    权限对象
	 * @return 数据权限列表，字段值字符串以逗号分隔
	 * @throws ServiceException
	 */
	public String findSelfDataPermissionStringList(String position,String object) 
										throws ServiceException;	
	/**
	 * 通过岗位ID查询数据权限
	 * @param user  	用户ID
	 * @param dpCode    权限编码
	 * @param object    权限对象
	 * @return 数据权限列表，字段值字符串以逗号分隔
	 * @throws ServiceException
	 */
	public String findSelfDataPermissionStringListByUser(String user,String dpCode,String object) 
										throws ServiceException;		
	
	/**
	 * 通过岗位ID查询数据权限
	 * @param position  职位ID
	 * @param object    权限对象
	 * @param dpCode    权限编码
	 * @return 数据权限列表，字段值字符串以逗号分隔
	 * @throws ServiceException
	 */
	public String findSelfDataPermissionStringList(List position,List dpCode,String object) 
										throws ServiceException;		
	/**
	 * 通过岗位ID列表查询组织权限
	 * @param position  职位ID列表
	 * @return 组织列表，List中的对象是IpUnitPermissionVO
	 * @throws ServiceException
	 */
	public List findUnitDataPermission(List position) throws ServiceException;
	

	/**
	 * 通过角色ID列表查询组织权限
	 * @param role  角色ID列表
	 * @return 组织列表，List中的对象是IpUnitPermissionVO
	 * @throws ServiceException
	 */
	public List findUnitDataPermissionByRole(List role) throws ServiceException;	
	
	/**
	 * 通过用户ID查询组织权限
	 * @param user  用户ID
	 * @return 组织列表，List中的对象是IpUnitPermissionVO
	 * @throws ServiceException
	 */
	
	public List findUnitDataPermissionByUser(String user) throws ServiceException;
	/**
	 * 通过岗位ID，权限编码查询组织权限
	 * @param position  职位ID
	 * @param upCode    权限编码
	 * @return 组织列表，List中的对象是IpUnitPermissionVO
	 * @throws ServiceException
	 */
	public List findUnitDataPermission(String position,String upCode) throws ServiceException;

	/**
	 * 通过岗位ID，权限编码查询组织权限
	 * @param position  职位ID
	 * @return 组织列表，List中的对象是IpUnitPermissionVO
	 * @throws ServiceException
	 */
	public List findUnitDataPermission(List position,List upCode) throws ServiceException;
	
	/**
	 * 通过用户，权限编码查询组织权限
	 * @param user  用户id
	 * @return 组织列表，List中的对象是IpUnitPermissionVO
	 * @throws ServiceException
	 */
	public List findUnitDataPermission(String user,List upCode) throws ServiceException;
	
	/**
	 * 通过用户，权限编码查询组织权限
	 * @param user  用户id
	 * @param upCode    数据权限编码
	 * @param direction 方向（UA:所有上级节点、UR:上级跟节点、UI:上级非根节点、
	 * 						OB:兄弟节点、OS:自己节点、
	 * 						DA:下级所有节点、DL:下级所有叶子节点、DI:下级所有内部节点）
	 * @return 组织列表，List中的对象是组织对象（com.cib.cap.org.vo.SCUnitProfileVO）
	 * @throws ServiceException
	 */
	public List findUnit(String user,String upCode,String direction)	throws ServiceException;
	
	/**
	 * 通过岗位ID查询组织权限
	 * @param position  职位ID列表
	 * @param upCode    数据权限编码
	 * @param direction 方向（UA:所有上级节点、UR:上级跟节点、UI:上级非根节点、
	 * 						OB:兄弟节点、OS:自己节点、
	 * 						DA:下级所有节点、DL:下级所有叶子节点、DI:下级所有内部节点）
	 * @param offset 步长，从当前节点到第几层（上下）节点
	 * @return 组织列表，List中的对象是组织对象（com.cib.cap.org.vo.SCUnitProfileVO）
	 * @throws ServiceException
	 */
	public List findUnit(List position,String upCode,String direction,String offset)throws ServiceException;

	/**
	 * 通过角色ID查询组织权限
	 * @param role  角色ID列表
	 * @param upCode    数据权限编码
	 * @param direction 方向（UA:所有上级节点、UR:上级跟节点、UI:上级非根节点、
	 * 						OB:兄弟节点、OS:自己节点、
	 * 						DA:下级所有节点、DL:下级所有叶子节点、DI:下级所有内部节点）
	 * @param offset 步长，从当前节点到第几层（上下）节点
	 * @return 组织列表，List中的对象是组织对象（com.cib.cap.org.vo.SCUnitProfileVO）
	 * @throws ServiceException
	 */
	public List findUnitByRole(List role,String upCode,String direction,String offset)throws ServiceException;

	
	/**
	 * 通过岗位ID查询组织权限
	 * @param position  职位ID
	 * @param unit      组织机构ID
	 * @return 组织ID的列表
	 * @throws ServiceException
	 */
	public boolean hasUnitDataPermission(String position,List unit) throws ServiceException;
	
	/**
	 * 自定义数据权限赋权
	 * @param sdPermission 自定义数据权限集，List中的对象是IpDataPermissionVO
	 * @param position 岗位
	 * @throws ServiceException
	 */
	public void savePositionSelfDataPermission(Map sdPermission,String position) throws ServiceException;
	
	/**
	 * 单位数据权限赋权
	 * @param upPermission  单位权限数据集，List中的对象是IpUnitPermissionVO
	 * @param position 岗位
	 * @throws ServiceException
	 */
	public void savePositionUnitDataPermission(Map upPermission,String position) throws ServiceException;
	
	/**
	 * 查询所有的自定义数据权限
	 * @return List中的对象是IpDataPermissionVO
	 * @throws ServiceException
	 */
	public List listAllSelfDataPermission() throws ServiceException;	
	
	/**
	 * 得到组织机构path的中文名称
	 * @param path 组织机构的path
	 * @return
	 * @throws ServiceException
	 */
	public String findUnitPathName(String path)throws ServiceException;
	
	/**
	 * 得到组织机构path的中文名称
	 * @param unitId 组织机构的ID
	 * @return
	 * @throws ServiceException
	 */
	public String findUnitPathNameById(String unitId)throws ServiceException;
	
	/**
	 * 获取指定单位ID的下属单位，包括自己单位
	 * @param unitId  单位ID
	 * @param include 是否包含当前unitId的对象
	 * @return List中的对象是组织对象（com.cib.cap.org.vo.SCUnitProfileVO）
	 * @throws ServiceException
	 */	
	public List findUnitDownById(String unitId,boolean include)throws ServiceException;
	/**
	 * 获取全部数据权限-组织数据的权限
	 * @return 
	 */
	public List findAllUnitDataPermission() throws ServiceException;
	/**
	 * 通过用户ID查询自定义数据权限
	 * @param staffId  	用户ID
	 * @return 数据权限列表，List中的对象是IpDataPermissionVO
	 * @throws ServiceException
	 */
	public List findSelfDataPermissionByUser(String staffId) throws ServiceException;
	
	/**
	 * 通过用户ID查询所有数据权限
	 * @param staffId  	用户ID
	 * @param isPage  	是否是页面编码
	 * @return 字段列表，List中的对象是元数据中的编码字段
	 * @throws ServiceException
	 */
	public List findSelfDataPermissionByUser(String staffId,boolean isPage) throws ServiceException;
	
	public List getAuthOrg(String unitid) throws ServiceException;
	
	public List testAuth() throws ServiceException;
}
